Skip to content

Conversation

@fatkodima
Copy link

I identified the problem, fixed and then discovered #967. So this is another implementation, with possibly the smallest change possible.

So, I profiled rubocops memory usage while running on itself:

bundle exec bin/rubocop-profile --memory lib/rubocop/cop

And get the following:

Before

Total allocated: 1.14 GB (16969980 objects)
Total retained:  7.35 MB (54861 objects)

allocated memory by gem
-----------------------------------
 408.41 MB  rubocop/lib
 297.48 MB  parser-2.7.2.0
 195.80 MB  rubocop-ast-1.0.1
 112.66 MB  rubocop-rspec-1.43.2
.....
allocated memory by file
-----------------------------------
 125.46 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/parser-2.7.2.0/lib/parser/source/tree_rewriter.rb
 110.64 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rubocop-rspec-1.43.2/lib/rubocop/cop/rspec/base.rb
....

After

Total allocated: 1.01 GB (15940558 objects)
Total retained:  6.92 MB (49414 objects)

allocated memory by gem
-----------------------------------
 409.73 MB  rubocop/lib
 300.32 MB  parser-2.7.2.0
 197.03 MB  rubocop-ast-1.0.1
  29.16 MB  other
  23.92 MB  rubocop-performance-1.8.1
  20.42 MB  set
   6.15 MB  ast-2.4.1
   5.84 MB  regexp_parser-1.8.2
   5.22 MB  unicode-display_width-1.7.0
   4.11 MB  psych
   2.24 MB  rubocop-rspec/lib
   2.17 MB  erb
....
allocated memory by file
-----------------------------------
 125.46 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/parser-2.7.2.0/lib/parser/source/tree_rewriter.rb
  60.59 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rubocop-ast-1.0.1/lib/rubocop/ast/node.rb
....
 204.78 kB  /Users/fatkodima/Desktop/oss/rubocop-rspec/lib/rubocop/cop/rspec/base.rb
....

And measured the impact of just rubocop-rspec.

bundle exec bin/rubocop-profile --memory --only RSpec lib/rubocop/cop

Before

Total allocated: 354.84 MB (4610105 objects)
Total retained:  5.84 MB (42878 objects)
....
allocated memory by file
-----------------------------------
 101.90 MB  /Users/fatkodima/Desktop/oss/rubocop-rspec/lib/rubocop/cop/rspec/base.rb
  40.35 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/parser-2.7.2.0/lib/parser/lexer.rb
....

After

Total allocated: 253.12 MB (3946086 objects)
Total retained:  5.86 MB (43001 objects)
....
allocated memory by file
-----------------------------------
  40.35 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/parser-2.7.2.0/lib/parser/lexer.rb
  29.81 MB  /Users/fatkodima/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/rubocop-ast-1.0.1/lib/rubocop/ast/node.rb
....
 43.97 kB  /Users/fatkodima/Desktop/oss/rubocop-rspec/lib/rubocop/cop/rspec/base.rb
....

So, ~30% reducing in memory.

@pirj
Copy link
Member

pirj commented Oct 26, 2020

Thanks a lot!
We've been looking to improve #967, so probably will just merge your solution instead.

There's a semi-related #1044, but the problem there is that cops from the same department should have different Patterns

@pirj pirj changed the base branch from master to release-2.0 October 26, 2020 15:42
This was referenced Oct 26, 2020
@bquorning
Copy link
Collaborator

Fixed in #1063.

@bquorning bquorning closed this Oct 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants